Elettronica Forex Informatica Motori _vti_cnf
  • Default
  • Midland
  • Progetto Rivelatore Acqua
  • Samsung
  • TvLcd
  • Rivelatore Acqua Antiallagamento

    Il circuito si avvale di un sensore a immersione nell'acqua di tipo a resistività formato da 4 contatti a immersione: comune, minimo, massimo e emergenza. Il microcontrollore usato è un PIC 16f819; Il principio di funzionamento è il seguente: appena il livello tocca il contatto del massimo parte la pompa comandata attraverso un relè fintanto che non scende al di sotto del livello di minimo. Il tempo di accensione della pompa può durare al max 50 secondi con uno stop di 15 secondi. Il circuito riconosce anche il bloccaggio della pompa attraverso una porta analogica del microcontrollore su un piccolo avvolgimento di 7-8 spire con diametro di c.a. 1 centimetro e di sezione piccola quali ad esempio filo di cavo di rete. La pompa funziona a 12v ed è attivata da un relè. Il sistema dispone di 3 spie una verde che lampeggia ad intervallo di un secondo per indicare il corretto funzionamento del sistema, una gialla che indica quando si attacca la pompa e una rossa che indica il sovra assorbimento. In caso di sovra assorbimento (mediante due test sfalzati di un secondo) si ha il bloccaggio del motore entro 2 secondi e passati 10 secondi si procede a far ripartire il motore con la speranza che ciò che ha creato il blocco non è più predente grazie al colpo dato in partenza dal motore. Se viene toccato il sensore di emergenza, viene attivato un'uscita pilotata da transistor che permette il comando di un indicatore lampeggiante o sirena. Per la compilazione del programma ci si può avvalere di MikroC.

    Codice sorgente

    #define livellobatteria 0 //channel 0 porta analogica #define assorbimento 1 //channel 1 porta analogica #define min PORTB.F7 #define max PORTB.F6 #define emerg PORTB.F5 #define pompa PORTB.F3 #define lampeggiante PORTB.F2 #define batteriacarica 500 //max 1024 #define maxassorbimento 500 //max 1024 #define maxtempopompaon 30 //in secondi unsigned char tempopompa,tempolampeggiante,controlloaggiuntivo; void interrupt(){ if (INTCON.RBIF==1){ //interrupt da cambiamento stato PORTB INTCON.RBIF==0; if (max==1 || emerg==1){ //accensione pompa controlloaggiuntivo=0; tempopompa=0; pompa=1; lampeggiante=1; } if (max==0 && emerg==0) lampeggiante=0; if (min==0 && max==0){ //spegnimento pompa controlloaggiuntivo=0; tempopompa=0; pompa=0; lampeggiante=0; } } if (PIR1.TMR2IF==1){ PIR1.TMR2IF=0; if (pompa==1) tempopompa++; else tempopompa=0; if (lampeggiante==1) tempolampeggiante++; else tempolampeggiante=0; controlloaggiuntivo++; } } unsigned int temp; void main(){ //Inizializza porte TRISA = 0xff; //porta A in input ADCON1 = 0x80; //porta A con 5 ingressi analogici TRISB = 0b11100010; //1=input 0=output //Imposta oscillatore RC a 31250 hz OSCCON.IRCF2=0; OSCCON.IRCF1=0; OSCCON.IRCF0=0; //Impostazione Interrupt INTCON.GIE = 1; //Global Interrupt Enabled INTCON.RBIE = 1; //Interrupt su PORTB[7:4] //Impostazioni Timer2 T2CON = 0b00001111; //timer2 on, prescaler=16, postscaler=2 -> interrupt di 1s INTCON.PEIE = 1; //Attiva interrupt secondari PIE1.TMR2IE = 1; //Attiva interrupt Timer2 while(1){ //controllo livello batteria temp = Adc_Read(livellobatteria); if (temp < batteriacarica && pompa==0){ //batteria scarica if (tempolampeggiante>=60 && lampeggiante==0) { lampeggiante=1; tempolampeggiante=0; } if (tempolampeggiante>=5 && lampeggiante==1) { lampeggiante=0; tempolampeggiante=0; } } temp = Adc_Read(assorbimento); if (temp > maxassorbimento && pompa==1){ //assorbimento eccessivo -> routine bloccante Delay_ms(1000); temp = Adc_Read(assorbimento); if (temp < maxassorbimento) goto procedi; lampeggiante = 1; Delay_ms(3000); pompa=0; tempopompa=0; Delay_ms(3000); if (max==1 || emerg==1)pompa=1; } procedi: if (tempopompa > maxtempopompaon){ lampeggiante = 1; pompa=0; tempopompa=0; Delay_ms(10000); if (max==1 || emerg==1)pompa=1; } if (controlloaggiuntivo == 255){ if (min==0 && max==0 && emerg==0 && pompa==1) pompa=0; //controllo aggiuntivo su spegnimento pompa if (max==1 || emerg==1) pompa=1; } } }